import yaml

def flatten_dict(d, parent_key='', separator='.'):
    """
    递归将嵌套字典按照分隔符展开，
    例如 {"a": {"b": 1, "c": 2}} 转换为 {"a.b": 1, "a.c": 2}
    """
    items = {}
    for k, v in d.items():
        new_key = f"{parent_key}{separator}{k}" if parent_key else k
        if isinstance(v, dict):
            items.update(flatten_dict(v, new_key, separator=separator))
        else:
            items[new_key] = v
    return items

def parse_parameters_file(file_path):
    parameters = []
    with open(file_path, 'r') as f:
        config = yaml.safe_load(f)
    
    # 假设 YAML 文件结构为：
    # /monitor:
    #    ros__parameters:
    #       key1: value1
    #       key2:
    #          sub1: value_sub1
    #          sub2: value_sub2
    #
    # 提取 "/monitor" 下的 ros__parameters 部分
    parameters_section = {}
    for root_key, root_value in config.items():
        if isinstance(root_value, dict) and 'ros__parameters' in root_value:
            parameters_section.update(root_value['ros__parameters'])
    
    # 将嵌套的参数展开成平铺的格式，参数名称用点分隔
    flat_params = flatten_dict(parameters_section)
    
    # 遍历每个参数，根据其 Python 类型构建字符串描述
    for name, default in flat_params.items():
        param_type = type(default).__name__
        # 若需要进一步映射为 C++ 中的参数类型，可在此处进行转换；
        # 这里直接使用 Python 类型名称进行展示
        desc = ""
        parameters.append(f'Param<{param_type}>("{name}", {default!r}, "{desc}")')
    
    return parameters

if __name__ == '__main__':
    file_path = "parameters.yaml"  # 参数文件路径
    params = parse_parameters_file(file_path)
    for param in params:
        print(param)
